﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using CapaDeNegocio;
using CapaDeDominio;

namespace Studio7iMVC2.Controllers
{
    public class LocalController : Controller
    {
        #region Dependencias que se inyectan con Spring.NET
        IAdministracionService AdminService { get; set; }
        #endregion 

        public ActionResult Index() // Genera la vista Views/Local/Index.aspx
        {
            ICollection<Local> modelo = AdminService.ListarLocales();
            return View(modelo);
        }
        [HttpPost]
        public ActionResult Buscar(string nombre) // Genera la vista Views/Local/Index.aspx
        {
            ICollection<Local> modelo = AdminService.ListarLocalesXNombre(nombre);
            return View("Index", modelo);
        }
        
        public ActionResult Creacion() // Genera la vista Views/Local/Creacion.aspx
        {
            return View();
        }
        [HttpPost]
        public ActionResult Crear(FormCollection formulario) // Recibe el formulario de Creacion.aspx
        {
            
            // Capturamos los datos del formulario enviado desde Creacion.aspx
            Local localACrear = new Local()
            {
                Nombre = (string)formulario["Nombre"],
                Direccion = (string)formulario["Direccion"]
            };
            // Coordinamos con el negocio para la funcionalidad
            try
            {
                Local localCreado = AdminService.CrearLocal(localACrear);
                TempData["mensaje"] = "Local " + localCreado.Codigo +" creado exitosamente";
                return RedirectToAction("Index"); // Todo bien, a la lista
            }
            catch (Exception ex)
            {
                ModelState.AddModelError(string.Empty, ex.Message); // Agregamos el error a mostrarse
                return View("Creacion", localACrear); // Problemas! De nuevo a Creacion.aspx
            }
        }

        public ActionResult Visualizacion(int Codigo) // Genera la vista Views/Local/Visualizacion.aspx
        {
            return View(AdminService.ObtenerLocal(Codigo));
        }

        public ActionResult Modificacion(int Codigo) // Genera la vista Views/Local/Modificacion.aspx
        {
            return View(AdminService.ObtenerLocal(Codigo));
        }
        [HttpPost]
        public ActionResult Modificar(FormCollection formulario) // Recibe el formulario de Modificacion.aspx
        {
            Local localAModificar = new Local()
            {
                Codigo = int.Parse(formulario["Codigo"]),
                Nombre = (string)formulario["Nombre"],
                Direccion = (string)formulario["Direccion"]
            };
            try 
            { 
                Local localModificado = AdminService.ModificarLocal(localAModificar);
                TempData["mensaje"] = "Local " + localModificado.Codigo + " modificado exitosamente";
                return RedirectToAction("Index"); // Todo bien, a la lista
            }
            catch (Exception ex)
            {
                
                ModelState.AddModelError(string.Empty, ex.Message); // Agregamos el error a mostrarse
                return View("Creacion", localAModificar); // Problemas! De nuevo a Modificacion.aspx
            }
        }

        public ActionResult Eliminacion(int Codigo) // Genera la vista Views/Local/Eliminacion.aspx
        {
            //return View(AdminService.ObtenerLocal(Codigo));
            return null;
        }
        [HttpPost]
        public ActionResult Eliminar(int Codigo) // Recibe el formulario de Eliminacion.aspx
        {
            try
            {
                Local localAEliminar = AdminService.ObtenerLocal(Codigo);
                AdminService.EliminarLocal(localAEliminar);
                TempData["mensaje"] = "Local " + localAEliminar.Codigo + " eliminado exitosamente";
                return RedirectToAction("Index"); // Todo bien, a la lista
            }
            catch (Exception ex)
            {

                ModelState.AddModelError(string.Empty, ex.Message); // Agregamos el error a mostrarse
                return View("Eliminacion", AdminService.ObtenerLocal(Codigo)); // Problemas! De nuevo a Eliminacion.aspx
            }
        } 
    }
}
